package ArrayList;

import javax.sound.midi.Soundbank;
import java.util.Arrays;

public class Aaa {

        public int[] elem;
        public int usedSize;//0
        //默认容量
        private static final int DEFAULT_SIZE = 10;

        public Aaa() {
            this.elem = new int[DEFAULT_SIZE];
        }

        /**
         * 打印顺序表:
         *   根据usedSize判断即可
         */
        public void display() {
            for(int i = 0; i< this.elem.length; i++){
                System.out.print(this.elem[i] +" ");
            }
            System.out.println();
        }

        // 新增元素,默认在数组最后新增
        public void add(int data) {
            if(isFull()){
                this.elem = Arrays.copyOf(this.elem, 2 * this.elem.length);
            }
            this.elem[this.usedSize] = data;
            this.usedSize++;
        }

        /**
         * 判断当前的顺序表是不是满的！
         * @return true:满   false代表空
         */
        public boolean isFull() {
            if(this.elem.length == this.usedSize){
                return true;
            }
            return false;
        }


        private boolean checkPosInAdd(int pos) {
            if(pos <  0 || pos >= this.usedSize){
                return false;
            }
            return true;//合法
        }

        // 在 pos 位置新增元素
        public void add(int pos, int data) {
            if(isFull()){
                System.out.println("已经满了");
                return ;
            }
            for(int i = this.usedSize; i >= pos ; i--){
                this.elem[i] = this.elem[i - 1];
            }
            this.elem[pos] = data;
            this.usedSize++;
        }

        // 判定是否包含某个元素
        public boolean contains(int toFind) {
            for(int i = 0; i < this.usedSize; i++){
                if(this.elem[i] == toFind){
                    return true;
                }
            }
            return false;
        }
        // 查找某个元素对应的位置
        public int indexOf(int toFind) {
            for(int i = 0; i < this.usedSize; i++){
                if(this.elem[i] == toFind){
                    return i;
                }
            }
            return -1;
        }

        // 获取 pos 位置的元素
        public int get(int pos) {
            if(isEmpty()){
                System.out.println("这个表为空");
            }
            if(!checkPosInAdd(pos)){
                System.out.println("pos位置不合法");
            }
            return this.elem[pos];
        }

        private boolean isEmpty() {
            if(this.usedSize == 0){
                return true;
            }
            return false;
        }
        // 给 pos 位置的元素设为【更新为】 value
        public void set(int pos, int value) {

            if(checkPosInAdd(pos)) {
                this.elem[pos] = value;
                return;
            }
            System.out.println("pos位置不合法");

        }

        /**
         * 删除第一次出现的关键字key
         * @param key
         */
        public void remove(int key) {
            if(isFull()){
                System.out.println("已经没有元素了");
                return;
            }

            int pos = indexOf(key);

            for(int  i = this.usedSize; i > pos ; i--){
                this.elem[i - 1] = this.elem[i];
            }
            this.usedSize--;
        }

        // 获取顺序表长度
        public int size() {
            return this.elem.length;
        }

        // 清空顺序表
        public void clear() {
            this.usedSize = 0 ;
        }
}
